package main

import (
	"crawler/engine"
	"crawler/persist"
	"crawler/scheduler"
	"crawler/zhenai/parser"
)

// 简单调度器
func runSimpleEngine() {
	engine.SimpleEngine{}.Run(engine.Request{
		Url: "http://www.zhenai.com/zhenghun",
		// 本地模拟相亲网站
		//Url:        "http://localhost:8080/mock/www.zhenai.com/zhenghun",
		ParserFunc: parser.ParseCityList,
	})
}

// 并发调度器
func runConcurrentEngine() {
	// 因为是指针接收者, 必须要定义一个变量, 只有变量才可以取地址
	e := engine.ConcurrentEngine{
		Scheduler:   &scheduler.SimpleScheduler{},
		WorkerCount: 10, // 设置运行的 worker 数量
	}

	e.Run(engine.Request{
		Url:        "http://www.zhenai.com/zhenghun",
		ParserFunc: parser.ParseCityList,
	})
}

// 队列调度器
func runQueuedConcurrentEngine() {
	// 先初始化存储器
	itemChan, err := persist.ItemSaver("zhenai_profile")
	if err != nil {
		panic(err)
	}

	// 因为是指针接收者, 必须要定义一个变量, 只有变量才可以取地址
	e := engine.ConcurrentEngine{
		Scheduler:   &scheduler.QueuedScheduler{},
		WorkerCount: 100,
		ItemChan:    itemChan,
	}

	e.Run(engine.Request{
		Url:        "http://www.zhenai.com/zhenghun",
		ParserFunc: parser.ParseCityList,
	})

	// 只抓取一个城市的数据, 便于调试
	// e.Run(engine.Request{
	// 	Url:        "https://www.zhenai.com/zhenghun/wuzhou",
	// 	ParserFunc: parser.ParseCity,
	// })
}

func main() {
	//runSimpleEngine()
	//runConcurrentEngine()
	runQueuedConcurrentEngine()
}
